package com.keyware.utils.keycloud;

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.X509EncodedKeySpec;

/** 
 * @ClassName: SignProvider
 * @Description: 数字签名验证类
 * @author yanwj
 * @date 2015年12月8日 下午5:53:29
 * 
 */
public class SignProvider {
	private SignProvider() {
	}

	/**
	 * 数字签名验证 （根据这三个就可以验证了）
	 * @param pubKeyText 公钥
	 * @param plainText 读取配置文件中的内容
	 * @param signText 数字签名
	 * @return
	 */
	public static boolean verify(byte[] pubKeyText, byte[] plainText, byte[] signText) {
		try {
			// 解密由base64编码的公钥,并构造X509EncodedKeySpec对象
			X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(Base64Util.decode(pubKeyText));
			// RSA对称加密算法
			KeyFactory keyFactory = KeyFactory.getInstance("RSA");
			// 取公钥匙对象
			PublicKey pubKey = keyFactory.generatePublic(bobPubKeySpec);
			
			System.out.println("==="+pubKey.toString());
			// 解密由base64编码的数字签名
			byte[] signed = Base64Util.decode(signText);
			Signature signatureChecker = Signature.getInstance("MD5withRSA");
			signatureChecker.initVerify(pubKey);
			signatureChecker.update(plainText);
			// 验证签名是否正常
			if (signatureChecker.verify(signed))
				return true;
			else
				return false;
		} catch (Throwable e) {
			System.out.println("校验签名失败");
			e.printStackTrace();
			return false;
		}
	}
}
